package com.marvels.financial.pay.service;

import java.util.Map;

import com.github.pagehelper.Page;
import com.marvels.common.dto.pay.MarvelsPayResultDTO;
import com.marvels.common.exception.MarvelsBusinessException;
import com.marvels.financial.loan.dto.RepaymentNoMobileDTO;
import com.marvels.financial.pay.dto.McfeMerchantRechargeRecordDTO;
import com.marvels.financial.pay.dto.MerchantRechargeDTO;
import com.marvels.financial.pay.dto.WithholdConditionDTO;


/**
 * 
* @ClassName: PayService 
* @Description:对外支付接口类  
* @author 李瑶
* @date 2018年10月6日 下午4:13:04 
*
 */
public interface PayService {
	
	
	/**
	 * 查询绑定成功的银行卡列表
	 * @param idno 身份证
	 * @param currentChannel 当前渠道
	 * @return 优先展示当前渠道的银行卡，如果存在老渠道的也会查出，根据is_support字段区分当前渠道是否支持
	 */
	public MarvelsPayResultDTO queryBankList(String idno, String currentChannel);
	
	/**
	 * 设置默认卡
	 * @param idno 身份证
	 * @param currentChannel 当前渠道
	 * @param loanId 在途的loanId
	 * @param bankId 银行卡id
	 * @return
	 */
	public MarvelsPayResultDTO updateDefaultCard(String idno, String currentChannel, String loanId, Integer bankCardId) throws MarvelsBusinessException;
	
	/**
	 * 
	* @Title: queryBindedList 
	* @Description: 查询用户的绑卡列表--全部卡（成功和非成功的都有） 
	* @param idno 身份证
	* @param channel 渠道 yb 易宝  后续渠道可进行拓展
	* @return       
	* @author 李瑶
	* @date 2018年10月10日 下午3:16:28
	 */
	public MarvelsPayResultDTO queryBindedList(String idno,String channel);
	
	
	/**
	 * 
	* @Title: queryBindedSuccessList 
	* @Description:  
	* @param idno
	* @param channel
	* @return       
	* @author 李瑶
	* @date 2018年11月2日 下午5:12:07
	 */
	public MarvelsPayResultDTO queryBindedSuccessList(String idno,String channel);
	
	
	/**
	 * 查询绑卡列表  当前通道未绑卡则返回之前通道的绑卡信息 
	 * @param param
	 * @return
	 */
	public MarvelsPayResultDTO bankBindList( Map<String, Object> param) throws MarvelsBusinessException ;
	
	
	/**
	 * 
	* @Title: queryBind 
	* @Description: 查看客户某张银行卡的绑卡情况  
	* @param idno 
	* @param bindCardNo
	* @param channel 渠道 yb 易宝  后续渠道可进行拓 
	* @return       
	* @author 李瑶
	* @date 2018年10月10日 下午3:18:58
	 */
	public MarvelsPayResultDTO queryBind(String idno,String bindCardNo,String channel);
	
	/**
	 * 
	* @Title: preBind 
	* @Description:预绑卡  
	* @param param 预绑卡入参
	* @param  channel 渠道 yb 易宝  后续渠道可进行拓
	* @return       
	* @author 李瑶
	* @date 2018年10月10日 下午3:19:52
	 */
	public MarvelsPayResultDTO preBind(Map<String, Object> param,String channel);
	
	/**
	 * 
	* @Title: bindCard 
	* @Description:绑卡  （短信校验）
	* @param requestNo 请求单号
	* @param validateCode 验证码
	* @param channel 渠道 yb 易宝  后续渠道可进行拓
	* @return       
	* @author 李瑶
	* @date 2018年10月10日 下午3:22:50
	 */
	public MarvelsPayResultDTO bindCard(String requestNo,String validateCode,String channel);
	
	/**
	 * 
	* @Title: unbind 
	* @Description:解绑  
	* @param idno 身份证
	* @param bindCardNo 银行卡号
	* @param channel 渠道 yb 易宝  后续渠道可进行拓
	* @return       
	* @author 李瑶
	* @date 2018年10月10日 下午3:23:46
	 */
	public MarvelsPayResultDTO unbind(String idno,String bindCardNo,String channel);
	
//	/**
//	 * 
//	 * @Title: withhold
//	 * @Description:代扣
//	 * @param idno
//	 *            身份证
//	 * @param bindCard
//	 *            银行卡号
//	 * @param amount
//	 *            金额 小数点后两位
//	 * @param title
//	 *            代扣标题
//	 * @param channel
//	 *            渠道 yb 易宝 后续渠道可进行拓
//	 * @return
//	 * @author 李瑶
//	 * @date 2018年10月10日 下午3:24:07
//	 * @return
//	 */
//	public MarvelsPayResultDTO withhold(String requestNo,String idno,String bindCard,String amount,String title,String channel);
//	
	
	/**
	 * 代扣
	 * @param conditionDTO
	 * @return
	 */
	public MarvelsPayResultDTO withhold(WithholdConditionDTO conditionDTO);
	
	
	/**
	 * 
	* @Title: queryWithholdResult 
	* @Description: 查询代扣结果 
	* @param orderNum 易宝编号
	* @param channel 渠道 yb 易宝  后续渠道可进行拓
	* @return       
	* @author 李瑶
	* @date 2018年10月10日 下午3:24:45
	 */
	public MarvelsPayResultDTO queryWithholdResult(String orderNum,String channel);
	
	/**
	 * 
	* @Title: pay 
	* @Description:代发  
	* @param param 代发入参
	* @param channel 渠道 yb 易宝  后续渠道可进行拓
	* @return       
	* @author 李瑶
	* @date 2018年10月10日 下午3:26:34
	 */
	public MarvelsPayResultDTO pay(Map<String, String> param,String channel); 
	
	/**
	 * 
	* @Title: queryPayResult 
	* @Description:查询代发结果  
	* @param orderNum 订单号
	* @param channel 渠道 yb 易宝  后续渠道可进行拓
	* @return       
	* @author 李瑶
	* @date 2018年10月10日 下午3:27:00
	 */
	public MarvelsPayResultDTO queryPayResult(String orderNum,String channel); 
	
	
	/**
	 * 
	* @Title: WithholdCallback 
	* @Description: 代扣回调 
	* @param param       
	* @author 李瑶
	* @date 2018年10月11日 上午9:54:53
	 */
	public String WithholdCallback(Map<String, String> param,String channel);
	
	/**
	 * 
	* @Title: payResultCallback 
	* @Description:支付结果回调  
	* @param param
	* @param channel
	* @return       
	* @author 李瑶
	* @date 2018年10月12日 上午11:08:57
	 */
	public String payResultCallback(Map<String, String> param,String channel);

	
	/**
	 * 
	* @Title: queryBindCardInfoById 
	* @Description: 根据绑卡ID主键查询用户的绑卡信息 
	* @param bindId 绑卡主键ID
	* @return       
	* @author 李瑶
	* @date 2018年10月10日 下午3:16:28
	 */
	public MarvelsPayResultDTO queryBindCardInfoById(long bindId);
	
	
	/**
	 * 
	* @Title: getBankCardInfo 
	* @Description:查询银行卡信息  
	* @param bankCardNo
	* @param channel
	* @return       
	* @author 李瑶
	* @date 2018年11月2日 下午5:31:12
	 */
	public MarvelsPayResultDTO getBankCardInfo(String bankCardNo,String channel);
	
	
	
	
	/**
	 * 商户充值
	 * @param merchantRechargeDTO
	 * @return
	 */
	public MarvelsPayResultDTO merchantRecharge(MerchantRechargeDTO merchantRechargeDTO)  throws MarvelsBusinessException;
	
	
	/**
	 * 商户余额查询
	 * @param merchantRechargeDTO
	 * @return
	 */
	public MarvelsPayResultDTO merchantBalance(MerchantRechargeDTO merchantRechargeDTO)  throws MarvelsBusinessException;
	
	
	/**
	 * 查询充值记录
	 * @param mcfeMerchantRechargeRecordDTO
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public Page<McfeMerchantRechargeRecordDTO>  merchantRechargeRecord(McfeMerchantRechargeRecordDTO mcfeMerchantRechargeRecordDTO) throws MarvelsBusinessException;
	
	/**
	 * 短信直接支付
	 * @param directPaymentSmsDTO
	 * @return
	 */
	public Map<String, Object> directPaymentSms(RepaymentNoMobileDTO repaymentNoMobileDTO)  throws MarvelsBusinessException;
	
}
